home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / attr / attributes.h next >
C/C++ Source or Header  |  2006-01-09  |  7KB  |  188 lines

  1. /*
  2.  * Copyright (c) 2001-2002,2004 Silicon Graphics, Inc.  All Rights Reserved.
  3.  * 
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2.1 of the GNU Lesser General Public License
  6.  * as published by the Free Software Foundation.
  7.  * 
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  * 
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  * 
  19.  * You should have received a copy of the GNU Lesser General Public
  20.  * License along with this program; if not, write the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
  22.  * USA.
  23.  * 
  24.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  25.  * Mountain View, CA  94043, or:
  26.  * 
  27.  * http://www.sgi.com 
  28.  * 
  29.  * For further information regarding this notice, see: 
  30.  * 
  31.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  32.  */
  33. #ifndef __ATTRIBUTES_H__
  34. #define    __ATTRIBUTES_H__
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40. /*
  41.  *    An almost-IRIX-compatible extended attributes API
  42.  *    (the IRIX attribute "list" operation is missing, added ATTR_SECURE).
  43.  */
  44.  
  45. /*
  46.  * The maximum size (into the kernel or returned from the kernel) of an
  47.  * attribute value or the buffer used for an attr_list() call.  Larger
  48.  * sizes will result in an E2BIG return code.
  49.  */
  50. #define ATTR_MAX_VALUELEN    (64*1024)    /* max length of a value */
  51.  
  52.  
  53. /*
  54.  * Flags that can be used with any of the simple attribute calls.
  55.  * All desired flags should be bit-wise OR'ed together.
  56.  */
  57. #define ATTR_DONTFOLLOW    0x0001    /* do not follow symlinks for a pathname */
  58. #define ATTR_ROOT    0x0002    /* use root namespace attributes in op */
  59. #define ATTR_TRUST    0x0004    /* tell server we can be trusted to properly
  60.                    handle extended attributes */
  61. #define ATTR_SECURE    0x0008    /* use security namespace attributes in op */
  62.  
  63. /*
  64.  * Additional flags that can be used with the set() attribute call.
  65.  * All desired flags (from both lists) should be bit-wise OR'ed together.
  66.  */
  67. #define ATTR_CREATE    0x0010    /* pure create: fail if attr already exists */
  68. #define ATTR_REPLACE    0x0020    /* pure set: fail if attr does not exist */
  69.  
  70. /*
  71.  * Define how lists of attribute names are returned to the user from
  72.  * the attr_list() call.  A large, 32bit aligned, buffer is passed in
  73.  * along with its size.  We put an array of offsets at the top that each
  74.  * reference an attrlist_ent_t and pack the attrlist_ent_t's at the bottom.
  75.  */
  76. typedef struct attrlist {
  77.     int32_t        al_count;    /* number of entries in attrlist */
  78.     int32_t        al_more;    /* T/F: more attrs (do call again) */
  79.     int32_t        al_offset[1];    /* byte offsets of attrs [var-sized] */
  80. } attrlist_t;
  81.  
  82. /*
  83.  * Show the interesting info about one attribute.  This is what the
  84.  * al_offset[i] entry points to.
  85.  */
  86. typedef struct attrlist_ent {    /* data from attr_list() */
  87.     u_int32_t    a_valuelen;    /* number bytes in value of attr */
  88.     char        a_name[1];    /* attr name (NULL terminated) */
  89. } attrlist_ent_t;
  90.  
  91. /*
  92.  * Given a pointer to the (char*) buffer containing the attr_list() result,
  93.  * and an index, return a pointer to the indicated attribute in the buffer.
  94.  */
  95. #define    ATTR_ENTRY(buffer, index)        \
  96.     ((attrlist_ent_t *)            \
  97.      &((char *)buffer)[ ((attrlist_t *)(buffer))->al_offset[index] ])
  98.  
  99. /*
  100.  * Implement a "cursor" for use in successive attr_list() calls.
  101.  * It provides a way to find the last attribute that was returned in the
  102.  * last attr_list() call so that we can get the next one without missing
  103.  * any.  This should be bzero()ed before use and whenever it is desired to
  104.  * start over from the beginning of the attribute list.  The only valid
  105.  * operation on a cursor is to bzero() it.
  106.  */
  107. typedef struct attrlist_cursor {
  108.     u_int32_t    opaque[4];    /* an opaque cookie */
  109. } attrlist_cursor_t;
  110.  
  111. /*
  112.  * Multi-attribute operation vector.
  113.  */
  114. typedef struct attr_multiop {
  115.     int32_t    am_opcode;    /* operation to perform (ATTR_OP_GET, etc.) */
  116.     int32_t    am_error;    /* [out arg] result of this sub-op (an errno) */
  117.     char    *am_attrname;    /* attribute name to work with */
  118.     char    *am_attrvalue;    /* [in/out arg] attribute value (raw bytes) */
  119.     int32_t    am_length;    /* [in/out arg] length of value */
  120.     int32_t    am_flags;    /* flags (bit-wise OR of #defines above) */
  121. } attr_multiop_t;
  122. #define    ATTR_MAX_MULTIOPS    128    /* max number ops in an oplist array */
  123.  
  124. /*
  125.  * Valid values of am_opcode.
  126.  */
  127. #define ATTR_OP_GET    1    /* return the indicated attr's value */
  128. #define ATTR_OP_SET    2    /* set/create the indicated attr/value pair */
  129. #define ATTR_OP_REMOVE    3    /* remove the indicated attr */
  130.  
  131. /*
  132.  * Get the value of an attribute.
  133.  * Valuelength must be set to the maximum size of the value buffer, it will
  134.  * be set to the actual number of bytes used in the value buffer upon return.
  135.  * The return value is -1 on error (w/errno set appropriately), 0 on success.
  136.  */
  137. extern int attr_get (const char *__path, const char *__attrname,
  138.             char *__attrvalue, int *__valuelength, int __flags);
  139. extern int attr_getf (int __fd, const char *__attrname, char *__attrvalue,
  140.             int *__valuelength, int __flags);
  141.  
  142. /*
  143.  * Set the value of an attribute, creating the attribute if necessary.
  144.  * The return value is -1 on error (w/errno set appropriately), 0 on success.
  145.  */
  146. extern int attr_set (const char *__path, const char *__attrname,
  147.             const char *__attrvalue, const int __valuelength,
  148.             int __flags);
  149. extern int attr_setf (int __fd, const char *__attrname,
  150.             const char *__attrvalue, const int __valuelength,
  151.             int __flags);
  152.  
  153. /*
  154.  * Remove an attribute.
  155.  * The return value is -1 on error (w/errno set appropriately), 0 on success.
  156.  */
  157. extern int attr_remove (const char *__path, const char *__attrname,
  158.             int __flags);
  159. extern int attr_removef (int __fd, const char *__attrname, int __flags);
  160.  
  161. /*
  162.  * Operate on multiple attributes of the same object simultaneously.
  163.  *
  164.  * This call will save on system call overhead when many attributes are
  165.  * going to be operated on.
  166.  *
  167.  * The return value is -1 on error (w/errno set appropriately), 0 on success.
  168.  * Note that this call will not return -1 as a result of failure of any
  169.  * of the sub-operations, their return value is stored in each element
  170.  * of the operation array.  This call will return -1 for a failure of the
  171.  * call as a whole, eg: if the pathname doesn't exist, or the fd is bad.
  172.  *
  173.  * The semantics and allowable values for the fields in a attr_multiop_t
  174.  * are the same as the semantics and allowable values for the arguments to
  175.  * the corresponding "simple" attribute interface.  For example: the args
  176.  * to a ATTR_OP_GET are the same as the args to an attr_get() call.
  177.  */
  178. extern int attr_multi (const char *__path, attr_multiop_t *__oplist,
  179.             int __count, int __flags);
  180. extern int attr_multif (int __fd, attr_multiop_t *__oplist,
  181.             int __count, int __flags);
  182.  
  183. #ifdef __cplusplus
  184. }
  185. #endif
  186.  
  187. #endif    /* __ATTRIBUTES_H__ */
  188.